package DataStructure

import java.util.ArrayList
import java.util.HashMap
import java.util.HashSet
import java.util.function.Consumer

fun main() {
    //在kotlin中java中的集合也可以使用
    var javaList = ArrayList<String>()
    var javaSet = HashSet<String>()
    var javaMap = HashMap<String, String>()

    /**
     * kotlin集合的定义
     */

    //listOf初始化只读集合返回return ArraysUtilJVM.asList(this)
    var kotlinList = listOf("1", "2")
    kotlinList[0];
    //可变集合的定义,下面两种但是等价,都返回ArrayList()
    var kotlinMutableList = mutableListOf<String>()
    var arrayList = arrayListOf<String>()

    //定义只读set
    var set = setOf("a", "b")

    //定义可读写set,下面两个方法等价都返回LinkedHashSet()
    var mutableSet = mutableSetOf<String>()
    var linkedHashSet = linkedSetOf<String>()
    //返回HashSet(),在java中LinkedHashSet为HashSet子类
    var hashSet = hashSetOf<String>()

    //以上都是无序的set集合,kotlin中sortedSet为有序Set集合,等价于java的TreeSet
    var treeSet = sortedSetOf<String>()

    //定义只读map,使用to初始化
    var map = mapOf<String, String>("A" to "a", "B" to "b")
    //定义可读写map,下面两个方法等价,都返回LinkedHashMap(),使用Pair初始化
    var mutableMap = mutableMapOf(Pair("A", "a"))
    var linkedHashMap = linkedMapOf<String, String>()
    //定义hashMap
    var hashMap = hashMapOf<String, String>()
    //定义对key排序的map,等价于java的TreeMap
    var sortMap = sortedMapOf<String, String>()

    //集合的遍历
    var list = mutableListOf<String>("a", "b", "c", "d")

    println("使用for-in循环")
    for (item in list) {
        print("$item ")
    }

    println("\n使用迭代器")
    var it = list.iterator()
    while (it.hasNext()) {
        print("${it.next()} ")
    }

    println("\n使用forEach遍历")
    //使用匿名内部类实现Consumer接口
    list.forEach {
        print("$it ")
    }
}